For now, this is unused.
<FILE>GskRenderNode</FILE>
gsk_render_node_ref
gsk_render_node_unref
+GskRenderNodeType
+gsk_render_node_get_node_type
gsk_render_node_get_parent
gsk_render_node_get_first_child
gsk_render_node_get_last_child
#error "Only <gsk/gsk.h> can be included directly."
#endif
+/**
+ * GskRenderNodeType:
+ * @GSK_NOT_A_RENDER_NODE: Error type. No node will ever have this type.
+ * @GSK_CONTAINER_NODE: A node containing a stack of children
+ * @GSK_CAIRO_NODE: A node drawing a #cairo_surface_t
+ * @GSK_TEXTURE_NODE: A node drawing a #GskTexture
+ *
+ * The type of a node determines what the node is rendering.
+ *
+ * Since: 3.90
+ **/
+typedef enum {
+ GSK_NOT_A_RENDER_NODE = 0,
+ GSK_CONTAINER_NODE,
+ GSK_CAIRO_NODE,
+ GSK_TEXTURE_NODE
+} GskRenderNodeType;
+
/**
* GskScalingFilter:
* @GSK_SCALING_FILTER_LINEAR: linear interpolation filter
{
g_return_val_if_fail (GSK_IS_RENDERER (renderer), NULL);
- return gsk_render_node_new ();
+ return gsk_render_node_new (GSK_CONTAINER_NODE);
}
/*< private >
/*< private >
* gsk_render_node_new:
- * @renderer: a #GskRenderer
+ * @type: type of the new node
*
* Returns: (transfer full): the newly created #GskRenderNode
*/
GskRenderNode *
-gsk_render_node_new (void)
+gsk_render_node_new (GskRenderNodeType type)
{
- GskRenderNode *self = g_slice_new0 (GskRenderNode);
+ GskRenderNode *self;
+
+ g_return_val_if_fail (type != GSK_NOT_A_RENDER_NODE, NULL);
+
+ self = g_slice_new0 (GskRenderNode);
+
+ self->type = type;
self->ref_count = 1;
gsk_render_node_finalize (node);
}
+/**
+ * gsk_render_node_get_node_type:
+ * @node: a #GskRenderNode
+ *
+ * Returns the type of the @node.
+ *
+ * Returns: the type of the #GskRenderNode
+ *
+ * Since: 3.90
+ */
+GskRenderNodeType
+gsk_render_node_get_node_type (GskRenderNode *node)
+{
+ g_return_val_if_fail (GSK_IS_RENDER_NODE (node), GSK_NOT_A_RENDER_NODE);
+
+ return node->type;
+}
+
/**
* gsk_render_node_get_parent:
* @node: a #GskRenderNode
GDK_AVAILABLE_IN_3_90
void gsk_render_node_unref (GskRenderNode *node);
+GDK_AVAILABLE_IN_3_90
+GskRenderNodeType gsk_render_node_get_node_type (GskRenderNode *node);
+
GDK_AVAILABLE_IN_3_90
GskRenderNode * gsk_render_node_get_parent (GskRenderNode *node);
GDK_AVAILABLE_IN_3_90
struct _GskRenderNode
{
+ GskRenderNodeType type;
+
volatile int ref_count;
/* The graph */
gboolean needs_world_matrix_update : 1;
};
-GskRenderNode *gsk_render_node_new (void);
+GskRenderNode *gsk_render_node_new (GskRenderNodeType type);
void gsk_render_node_make_immutable (GskRenderNode *node);